const { getMockData } = require('./mockData');

// 将模拟数据模式设置为关闭
let useMockData = false;

// 模拟数据延迟时间(ms)
const MOCK_DELAY = 500;

// 基础URL
const BASE_URL = 'http://localhost:3000';

/**
 * 发送请求
 * @param {Object} options - 请求选项
 */
function request(options) {
  if (useMockData && options.mockKey) {
    return mockRequest(options);
  }

  // 构建完整URL
  const url = options.url.startsWith('http') ? options.url : BASE_URL + options.url;

  wx.request({
    url: url,
    method: options.method || 'GET',
    data: options.data,
    header: options.header,
    success: (res) => {
      if (res.statusCode !== 200 && options.mockKey) {
        console.log('请求失败，使用模拟数据');
        mockRequest(options);
      } else {
        options.success && options.success(res);
      }
    },
    fail: (err) => {
      console.error('请求失败:', err);
      if (options.mockKey) {
        console.log('请求失败，使用模拟数据');
        mockRequest(options);
      } else {
        options.fail && options.fail(err);
      }
    },
    complete: options.complete
  });
}

/**
 * 处理模拟数据请求
 */
function mockRequest(options) {
  setTimeout(() => {
    const mockData = getMockData(options.mockKey);
    if (mockData) {
      console.log('使用模拟数据:', options.mockKey);
      options.success && options.success({
        statusCode: 200,
        data: mockData
      });
    } else {
      console.log('未找到对应的模拟数据');
      options.fail && options.fail({
        errMsg: '未找到对应的模拟数据'
      });
    }
    options.complete && options.complete();
  }, MOCK_DELAY);
}

/**
 * 切换模拟数据模式
 */
function toggleMockData(use) {
  useMockData = use;
  console.log('模拟数据模式:', useMockData ? '开启' : '关闭');
}

module.exports = {
  request,
  toggleMockData
};